#include "mainwindow.h"
#include <QMessageBox>
#include <QString>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 初始化结果标签（绿色文字，仅显示计算结果）
    if (ui->label_Result) {
      //  ui->label_Result->setStyleSheet("color: green; font-size: 20px;");
        ui->label_Result->setText("请输入任意两个参数，然后点击计算");
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_Calculate_clicked()
{
    // 防御性检查：确保控件存在
    if (!ui->lineEdit_WaterVolume || !ui->lineEdit_DilutionRatio ||
        !ui->lineEdit_MedicineVolume || !ui->label_Result) {
        QMessageBox::critical(this, "错误", "请检查 UI 控件是否正确命名");
        return;
    }

    // 读取输入（带错误检查）
    bool ok1 = false, ok2 = false, ok3 = false;
    double water = ui->lineEdit_WaterVolume->text().toDouble(&ok1);
    double ratio = ui->lineEdit_DilutionRatio->text().toDouble(&ok2);
    double medicine = ui->lineEdit_MedicineVolume->text().toDouble(&ok3);

    // 至少两个有效输入
    int validCount = (ok1? 1 : 0) + (ok2? 1 : 0) + (ok3? 1 : 0);
    if (validCount < 2) {
        QMessageBox::warning(this, "输入错误", "请准确填写任意两个参数，第三个参数将自动计算");
        ui->label_Result->setText("输入不足");
        return;
    }

    // 计算逻辑（仅输出结果数据）
    QString result;
    if (!ok1) { // 计算水体积
        water = medicine * ratio;
        result = "需要加入 "+QString::number(water) + " 毫升水";
    } else if (!ok2) { // 计算稀释比例
        ratio = water / medicine;
        result = "稀释比例应为 "+QString::number(ratio) + ":1。";
    } else if (!ok3) { // 计算药量
        medicine = water / ratio;
        result = "需要加入 "+QString::number(medicine) + " 毫升药液。";
    } else { // 全部输入时校验（仅提示是否符合）
        if (qFuzzyCompare(water, medicine * ratio)) {
            result = "参数正确";
        } else {
            result = "参数不匹配";
        }
    }

    // 仅显示结果数据
    ui->label_Result->setText(result);
}

void MainWindow::on_pushButton_Reset_clicked()
{
    // 清空所有输入和结果
    if (ui->lineEdit_WaterVolume) ui->lineEdit_WaterVolume->clear();
    if (ui->lineEdit_DilutionRatio) ui->lineEdit_DilutionRatio->clear();
    if (ui->lineEdit_MedicineVolume) ui->lineEdit_MedicineVolume->clear();
    if (ui->label_Result) ui->label_Result->setText("请输入任意两个参数，然后点击计算");
}

void MainWindow::on_pushButton_Close_clicked()
{
    this->close();
}
